在前一天的Ruby及Rails的介紹中,一直反覆提到 「物件導向(Object-oriented)」 這個名詞,在還沒學程式以前,每次聽到這個名詞就覺得有種不明覺厲的感覺,今天就來挑戰一題與此相關的內容,試著解釋看看!
請解釋在Ruby當中幾乎所有的東西都是物件?
Everything (almost) is an object in Ruby. Please explain
要回答這題,首先要了解什麼是「物件」。
物件(Object)擁有狀態(State)和行為(Behavior),物件可以與現實世界的東西做連結。譬如一隻貓就可以是一個物件,那貓的「毛色」、「年齡」是物件的狀態,而貓可以「跳躍」、「吃貓食」就是物件的行為。
在物件導向的程式語言中,物件(Object)是一個類別(Class)所製造出來的實體(Instance)。
類別(Class)是建立物件的藍圖,裡面描述了物件的狀態以及物件可以做的行為。例如:「人類」就是一個類別,類別裡可能規範了一些基本的狀態(兩隻手、兩隻腳、一雙眼睛)和可以做的行為(走路、睡覺),而所有的人,包括你跟我,都是由「人類」這個類別所產生的實體。
在Ruby的世界中幾乎所有的東西都是物件,包括數字、字串、陣列等等。既然是物件,就是從某個類別建立出來的。
下面就試著對數字使用.class這個指令(或說方法),來找到他的是來自哪個類別。
5.class # => Integer
Integer.class # => Class
Class.class # => Class
5這個數字是個物件,是由Integer這個類別所產生出來的,而Integer類別也是個物件,是由Class這個類別所產生出來的,而Class類別也是從Class這個類別自生出來的,所以Class類別也是個物件。
在Ruby當中,所有的類別(Class)都是Class
這個類別所製造出來的實體。
(All classes are instances of the class "Class".)
而會說「幾乎」就表示有極少數不是物件的東西,例如區塊(Block)、方法(method)、條件陳述(conditional statements, ie: if
,else
)等等,這些不是物件的東西,也不屬於任何一個類別。
在物件導向程式中,物件(Object)是一個類別(Class)所產生的實體(Instance),有其狀態和行為。
而在Ruby中,所有的類別都是Class
這個類別所製造出來的實體,所以他們也都是物件。
少數如區塊(Block)、方法(method)等不是物件,不屬於任何一個類別。